package com.sheng.util;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;

/**
 * The type Generator.
 *
 * @Author: 王胜
 * @Date 2022 /11/17 16:10
 */
public class Generator {
    /**
     * The entry point of application.
     *
     * @param args the input arguments
     */
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/test_platform", "root", "123456")
                .globalConfig(builder -> {
                    builder.author("王胜") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .disableOpenDir()// 禁止打开输出目录，默认值:true
                            .commentDate("yyyy-MM-dd HH:mm")// 注释日期，默认值: yyyy-MM-dd
                            .outputDir("D:\\back_code\\sheng-test\\springboot-cli\\src\\main\\java"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.sheng") // 设置父包名，默认值:com.sheng
//                            .moduleName("samples") // 设置父包模块名，默认值:无
                            .entity("entity")// Entity 包名，默认值:entity
                            .service("service")// Service 包名，默认值:service
                            .serviceImpl("service.impl")// Service Impl 包名，默认值:service.impl
                            .mapper("mapper")// Mapper 包名，默认值:mapper
                            .xml("mapper.xml")// Mapper XML 包名，默认值:mapper.xml
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D:\\back_code\\sheng-test\\springboot-cli\\src\\main\\resources\\mapper")) // 路径配置信息
                            .controller("controller");// Controller 包名，默认值:controller
                })
                .strategyConfig(builder -> {
                    builder.addInclude("t_api_auto") // 设置需要生成的表名
                            .addTablePrefix("sys_","t_")// 设置过滤表前缀
                            .entityBuilder().disableSerialVersionUID()// 禁用生成 serialVersionUID,默认值:true
                            .enableChainModel()// 开启链式模型,默认值:false
                            .enableLombok()// 开启 lombok 模型,默认值:false
                            .enableTableFieldAnnotation()// 开启生成实体时生成字段注解,默认值:false
                            .enableActiveRecord()// 开启 ActiveRecord 模型,默认值:false
//                                            .versionColumnName("version")// 乐观锁字段名(数据库)
//                                            .logicDeleteColumnName("del_flag")// 逻辑删除字段名(数据库)
//                                            .addTableFills(new Column("create_time", FieldFill.INSERT))
//                                            .addTableFills(new Column("last_update_time", FieldFill.INSERT_UPDATE))
                            .mapperBuilder().superClass(BaseMapper.class)// 设置父类
                            .enableMapperAnnotation()// 开启 @Mapper 注解,默认值:false
                            .enableBaseResultMap()// 启用 BaseResultMap 生成,默认值:false
                            .enableBaseColumnList()// 启用 BaseColumnList,默认值:false
                            .controllerBuilder().enableHyphenStyle()// 开启驼峰转连字符,默认值:false
                            .enableRestStyle();// 开启生成@RestController 控制器,默认值:false
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用 Freemarker 引擎模板
                .execute();
    }
}
